package com.zf.jdk_new;

/**
 * jdk21新特性预览版：
 * - 字符串模板，预览
 * - 未命名变量
 */
public class Jdk21Pre {
    public static void main(String[] args) {
        testStrPattern();
        System.out.println("===========");
        testUnnamedVar();
    }


    /**
     * 字符串模板，预览
     * STR 模板处理器
     * FMT 模板处理器
     */
    public static void testStrPattern() {
        // 单行
        String blog = "blog.didispace.com";
        String str = STR."My blog is \{blog}";
        System.out.println(str);

        // 多行
        String name = "dd";
        String age = "12";
        var json = STR."""
                    {
                        "user": "\{name}",
                        "age: \{age}
                    }
                    """;
        System.out.println(json);

        // 执行计算
        int x = 10, y = 20;
        String s = STR."\{x} + \{y} = \{x + y}";
        System.out.println(s);

        // 调用方法
        String sf = STR."My blog is \{Math.max(1, 2)}";
        System.out.println(sf);

        // 调用变量
        User u = new User("didi", 12); // 构造函数参数为name属性和blog属性
        String su = STR."\{u.name}的年龄：+ \{u.age}";
        System.out.println(su);

    }

    static class User {
        String name;
        Integer age;

        public User(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public User() {
        }
    }


    /**
     * 未命名模式和变量，预览
     */
    public static void testUnnamedVar() {
        // 使用 _ 标识一个不会去使用的变量，提高可读性, _ 变量无法使用

        int _ = 1; // 不能这样声明，java不允许这样的名称，会运行报错

        try {

        } catch (Exception _) {
            // 不处理异常
        }
    }

}
